Bjarne Stroustrup
Bjarne Stroustrup is the designer and original implementer of C++ as well as the author of "The C++ Programming Language (4 th Edition)" and "A Tour of C++ (3 rd edition), Programming: Principles and Practice using C++ (2 nd Edition)", and many popular and academic publications. He is a professor of Computer Science at Columbia University in New York City. Dr. Stroustrup is a member of the US National Academy of Engineering, and an IEEE, ACM, and CHM fellow. He received the 2018 Charles Stark Draper Prize, the IEEE Computer Society's 2018 Computer Pioneer Award, and the 2017 IET Faraday Medal. He did much of his most important work in Bell Labs. His research interests include distributed systems, design, programming techniques, software development tools, and programming languages. To make C++ a stable and up-to-date base for real-world software development, he has been a leading figure with the ISO C++ standards effort for more than 30 years. He holds a master’s in Mathematics from Aarhus University, where he is an honorary professor in the Computer Science Department, and a PhD in Computer Science from Cambridge University, where he is an honorary fellow of Churchill College.
Polymorphism is among the most widely discussed introductory topics in software engineering. Often couched in a vague context of code reuse, much of this introductory focus nonetheless revolves around interface similarity. More advanced discussions of code reuse in software engineering typically revolve around general topics like the maintainability cost of code coupling, but usually avoid discussing the merits of advanced language-specific mechanisms for code reuse. Furthermore, very little is made of the information loss and cognitive load associated with poor expression of sameness in implementation, regardless of interface coupling concerns.
In this talk, we will examine the wide spectrum of tools for expressing “sameness” in modern C++. Beyond introductory “is-a” inheritance and runtime polymorphism, we will delve into templates, concepts, mixins, CRTP, C++23’s “deducing this,” and a number of more advanced techniques on the spectrum from generic programming to template metaprogramming. We will explore the long-term software engineering costs and benefits of each of these mechanisms. In each case, we will discuss important trade-offs, such as runtime and compile-time overhead, mechanistic complexity versus “sameness” information loss, code coupling, maintainability, and the ability to adapt to evolving implementation needs over time. Finally, we will discuss mechanisms for expressing “sameness” that are difficult or impossible in modern C++—such as dependency injection and aspect-oriented programming—but that are commonplace in other languages. We will delve into both the minimal and ideal language features that would enable these paradigms to become a part of the C++ toolbox, and we will discuss the outlook for the inclusion of such features in future versions of standard C++.
"Why should we move to a more advanced C++ version if we can already archive everything with C++11, which is also considered as a modern C++?"
"If you ask yourself this question, this talk is for you. In this talk we'll discuss the new features from C++17 to C++20, and we'll talk briefly about major features in 23.
"C++11/14 brought us the beginning of useful features like lambda expressions, iterators improvements, constexpr, auto and more. However, the more the C++ standard made progress, the more compile time options have been added and the readability became easier to archive. Moving forward gives more stability to code, based on the most experienced C++ developers' experience, who take part as standard and compilers writers.
Daisy Hollman
Dr. Daisy S. Hollman began working with the C++ standards committee in 2016, where she has made contributions to a wide range of library and language features, including proposals related to executors, atomics, generic programming, futures, and multidimensional arrays. Since receiving her Ph.D. in Quantum Chemistry in 2013, her research has focussed primarily on parallel and concurrent programming models, though a broader focus on general accessibility of complex abstractions has become her focus in more recent years. She currently works on C++ language and library design at Google, where she continues to focus on providing broad accessibility of programming models and abstractions, with a particular focus on design for diversity and inclusivity.
This workshop aims to address the design and implementation principles and tactics necessary for creating secure C++ applications. While memory issues will be given proper attention, it's important to note that application safety extends beyond this. To ensure application safety, it is crucial to capture requirements correctly, make appropriate design choices, implement code securely, and conduct testing, static code analysis, and dynamic sanitizing. Through relevant examples and class practice, we will cover the entire life cycle of creating secure applications, and provide a checklist for achieving enhanced safety and improved code quality.
Let's embark on a journey through the exciting discussions about C++, found in StackOverflow's Q&A. We will cover both fundamental issues as well as anecdotal corners of the language, get lost down a few rabbit holes, and become familiar with some topics usually reserved for "language lawyers". We will finish by exploring whether, and how ChatGPT might help with writing C++ in the future.
Amir Kirsh
Amir Kirsh is a C++ lecturer at the Academic College of Tel-Aviv-Yaffo, a visiting lecturer at Stony Brook University and dev advocate at Incredibuild. Previously the Chief Programmer at Comverse, after being CTO and VP R&D at a startup acquired by Comverse. He is also a co-organizer of the annual Core C++ conference and a member of the ISO C++ Israeli National Body.
This class gives you a detailed insight into the multithreading facilities of C++. Starting with the foundation in C++11, continuing with the parallel STL in C++17, and closing with the concurrency features in C++20.
With the publishing of the C++11 standard, C++ got a multithreading library and a memory model. This library has basic building blocks like atomic variables, threads, locks, and condition variables. That’s the foundation on which C++ standards such as C++20 can establish higher-level abstractions consisting of extended atomics, semaphores, latches and barriers, cooperative interruption, an improved std::jthread, and synchronized output streams.
Rainer Grimm
I've worked as a software architect, team lead, and instructor since 1999. In 2002, I created company-intern meetings for further education and have given training courses since 2002. My first tutorials were about proprietary management software, but I began teaching Python and C++ soon after. In my spare time, I like to write articles about C++, Python, and Haskell, and to speak at conferences. I publish weekly on my English blog Modernes Cpp and the German blog, hosted by Heise Developer. Since 2016, I'm an independent instructor giving seminars about modern C++ and Python. In the last ten years, I published several books in various languages about modern C++. Due to my profession, I always search for the best way to teach modern C++.
This class is designed to help C++ developers explore Rust, an increasingly popular and powerful language. Through hands-on examples and projects, students will learn why Rust has become so widely adopted and why it is such an attractive choice for C++ developers. Learning Rust will not only enable attendees to take a peek at this new language, but will also greatly enhance the quality of their C++ code.
In the first part of the class, students will learn about Rust's history, governance model, and community. We will also discuss the main technical selling points of Rust and its current level of maturity. Following this, we will go through a "Hello World" example in Rust so that students can become familiar with Rust's syntax and understand some of the fundamental features.
To further solidify their understanding of these concepts, students will then work on a "guess the number" game project. We will look at how to improve the game by using pattern matching and extracting functionality to separate functions.
In addition to the fundamentals, the class will cover the use of external libraries. We will discuss what a "crate" is and how to find and add one via cargo. We will also look at intermediate features like structs and enums, dynamic allocation, traits and polymorphism, strings and manipulation, and common standard library containers and utilities.
Two additional projects will also be included. Students will re-create the Wordle game in Rust and add a CLI to the "guess the number" game, using the 'clap' 3rd party crate. Finally, we will showcase other compelling Rust features such as lifetimes, async, compile-time thread safety, compile-time evaluation, hygienic macros, and interoperability with C++.
By the end of the class, attendees will have acquired the knowledge and skillset necessary to start their journey with Rust, and they will be able to apply the learned notions to their C++ development mindset.
"Modules will solve everything", people say -- some optimistically, others sarcastically. However, modules are far from reaching real-world maturity, and it is still not certain whether they will improve compilation times in every situation and how costly it will be to migrate a large codebase.
Do we have to suffer with excruciating compilation times until we are able to migrate to modules? Not at all!
If you are interested in learning about practical tools and techniques to improve compilation times on codebases of any size, today, this talk is for you! We will cover:
Vittorio Romeo
Vittorio Romeo (B.Sc. Computer Science, 6+ YoE at Bloomberg) works on mission-critical C++ infrastructure and provides Modern C++ training to hundreds of fellow employees.
He began programming around the age of 8 and became a C++ enthusiast shortly after discovering the language. Vittorio created several open-source C++ libraries and games, published many video courses and tutorials, actively participates in the ISO C++ standardization process, and maintains the popular SFML library.
He co-authored the acclaimed "Embracing Modern C++ Safely" book (published in January 2022) with J. Lakos, R. Khlebnikov, and A. Meredith.
Vittorio is an active member of the C++ community with an ardent desire to share his knowledge and learn from others: he presented and offered workshops over 20 times at international C++ conferences (including CppCon, C++Now, ++it, ACCU, C++ On Sea, C++ Russia, and Meeting C++), covering topics of various nature.
He also maintains a website with advanced C++ articles and a YouTube channel featuring well-received modern C++11/14 tutorials. Lastly, he's active on StackOverflow, taking great care in answering interesting C++ question (90k reputation).
When he's not writing code, Vittorio enjoys weightlifting, playing volleyball, scuba diving, canyoning, gaming, and enjoying sci-fi content.
This workshop provides an introduction to the low-level interfaces that are used to build system-level applications on Linux (and UNIX) systems. Topics covered include file I/O using system calls, signals, processes, and process lifecycle (fork()
, execve()
, wait()
, exit()
).
There will be practical programming sessions as part of the workshop.
User namespaces are at the heart of many interesting Linux technologies that allow isolation and sandboxing of applications, for example running containers without root privileges and sandboxes for web browser plug-ins. In this presentation, we’ll look in detail at user namespaces, building up a basic understanding of what a user namespace is and going on to questions such as: what does being "superuser inside a user namespace" allow you to do (and what does it not allow); and what is the relationship between user namespaces and other namespace types (PID, UTS, network, etc.)? We’ll also employ some simple shell commands to create and experiment with user namespaces in order to better understand how they work.
Michael Kerrisk
Michael Kerrisk is a trainer, author, and programmer who has a passion for investigating and explaining software systems. He is the author of "The Linux Programming Interface", a widely acclaimed book on Linux (and UNIX) system programming. He has been actively involved in the Linux development community since 2000, operating mainly in the area of testing, design review, and documentation of kernel-user-space interfaces and was for many years the maintainer of the Linux "man-pages" project, which provides the primary documentation for Linux system calls and C library functions. Michael is a New Zealander, living in Munich, Germany.
Abstraction Layers are one of the strongest tools we're using for software development. Even though being taught during the first semester of a Computer Science undergraduate and is widely used throughout the everyday workflow of software development, a lot of logic bugs occur by wrong usage of this concept.
During this talk, we will define and explore the C++ abstractions layers, through both the mental model as reflected in papers, as well as through past mistakes and bugs. We will introduce some ground rules to encourage more correct usage of this concept, by extrapolating from examples from the latest C++23 and C++26 standards' features. Finally, we will review a proposal for addressing ISO C++ WG21 committee work.
This is an exploratory talk, audience participation is highly encouraged!
We are happy to invite all C++ enthusiastic developers to join our pre-opening evening of the Core C++ 2023 conference.
This pre-opening event is open for all, whether you are registered to the conference or not. However, registration to the event here, in this meetup page, is required for anyone who wishes to join!
Note that this event is happening at the Academic College of Tel-Aviv-Yaffo, while the next two days of the main Core C++ conference are this year at the Tel-Aviv Cinematheque.
See event page @meetup.com for details and registration
Inbal Levi
Inbal Levi is a Lead Software Engineer at MPGC Services Ltd (Millennium) with a passion for high performance, readability, and software design. She is an active member of the ISO C++ Standards Committee as a co-chair of Library Evolution, chair of SG9 (Ranges group), and the chair of the ISO C++ Israeli NB. Inbal is also a director at ISO C++ foundation and puts effort into evolving both the local and international C++ community, as an organizer of the CoreC++ conference and user group, and as the program chair of C++Now.
In the next decade, three major new C++ features will reshape how we write C++ code - reflection/injection, pattern matching, and senders:
Come to this talk to find out what's on the horizon for C++, how it will change how you code, and why you should be excited about it.
We are happy to invite all C++ enthusiastic developers to join our pre-opening evening of the Core C++ 2023 conference.
This pre-opening event is open for all, whether you are registered to the conference or not. However, registration to the event here, in this meetup page, is required for anyone who wishes to join!
Note that this event is happening at the Academic College of Tel-Aviv-Yaffo, while the next two days of the main Core C++ conference are this year at the Tel-Aviv Cinematheque.
See event page @meetup.com for details and registration
Bryce Adelstein Lelbach
Bryce Adelstein Lelbach has spent over a decade developing programming languages and software libraries. He is a Principal Architect at NVIDIA, where he leads programming language standardization efforts and drives the technical roadmap for NVIDIA's HPC and Quantum compilers and libraries. Bryce is passionate about C++ and is one of the leaders of the C++ community. He is the chair of INCITS/PL22, the US standards committee for programming languages and the Standard C++ Library Evolution group. He also serves as editor for the INCITS Inclusive Terminology Guidelines. Bryce served as the program chair for the C++Now and CppCon conferences for many years. On the C++ Committee, he has personally worked on concurrency primitives, parallel algorithms, executors, and multidimensional arrays. He is one of the founding developers of the HPX parallel runtime system.
Most developers have at least some notion of the meaning of object, state, invariant, value, and invalid. On the other hand, it can be surprisingly difficult to precisely define these words in a way that matches both intuition and common usage. This difficulty has even led to library divergence within the C++ standard library!
This talk is a journey of discovery where we not only find satisfactory definitions, but we identify practical, good coding practices along the way. At the end of this talk you'll be able to identify implicit contracts, understand the deep connection between move semantics and exception safety, and, in general, have a greater appreciation for the meaning of the programs we write every day.
We are happy to invite all C++ enthusiastic developers to join our pre-opening evening of the Core C++ 2023 conference.
This pre-opening event is open for all, whether you are registered to the conference or not. However, registration to the event here, in this meetup page, is required for anyone who wishes to join!
Note that this event is happening at the Academic College of Tel-Aviv-Yaffo, while the next two days of the main Core C++ conference are this year at the Tel-Aviv Cinematheque.
See event page @meetup.com for details and registration
David Sankel
David Sankel is a Principal Scientist at Adobe and an active member of the C++ Standardization Committee. His experience spans microservice architectures, CAD/CAM, computer graphics, visual programming languages, web applications, computer vision, and cryptography. He is a frequent speaker at C++ conferences and specializes in large-scale software engineering and advanced C++ topics. David’s interests include dependently typed languages, semantic domains, EDSLs, and functional reactive programming. He is the project editor of the C++ Reflection TS, Executive Director of the Boost Foundation, and an author of several C++ proposals including pattern matching and language variants.
This talks describes an update system designed for scale of 100s M of users. It presents generic solution to update any data-structure in a simple way using modern C++ facilities in standard library only. It shows arguments for strong types and readable code using verbs and nouns. Even if you are not going to need such functionality, this talk can serve as an inspiration how to write clean code.
Hana Dusíková
Hana is SG7 chair which is a study group for Static Reflection in the ISO C++ committee. She created Compile Time Regular Expression (CTRE) library and Compile Time Hash (cthash).
Can a language whose official motto is "Avoid Success at All Costs" teach us new tricks in modern C++ ? If Haskell is so great, why hasn't it taken over the world? My claim is that it has. But not as a Roman legion loudly marching in a new territory, rather as distributed Trojan horses popping in at the gates, masquerading as modern features or novel ideas in today’s mainstream languages. Functional Programming ideas that have been around for over 40 years will be rediscovered to solve our current software complexity problems. Indeed, modern C++ has become more functional. From mundane concepts like lambdas & closures, std::function, values types and constants, to composability of STL algorithms, lazy ranges, folding, mapping or even higher-order functions in STL. Did I mention Rust yet? In this session we’ll analyze a bunch of FP techniques in C++ and see how they help make our code shorter, clearer and faster, by embracing a declarative vs. an imperative style. We’ll visit the functional parts of current STL, use algebraic data types (ADT) and learn about the new FP stuff coming in the next C++ standard, like ranges or monadic extensions to std::future
, std::optional
and std::expected
. Brace yourselves for a bumpy ride including composition, lifting, currying, partial application, pure functions, maybe even pattern matching and lazy evaluation.
Victor Ciura
Victor Ciura is a Principal Engineer on the Visual C++ team, helping to improve the tools he’s been using for years. Before joining Microsoft, he programmed C++ professionally for 20 years, designing and implementing several core components & libraries of Advanced Installer, improving the virtualization and repackaging technologies for MSI/MSIX.
One of his hobbies is tidying-up and modernizing aging codebases and has been known to build open-source tools that help this process: Clang Power Tools.
He’s a regular guest at Computer Science Department of his Alma Mater, University of Craiova, where he gives student lectures & workshops on using modern C++, STL, algorithms and optimization techniques.
More details: @ciura_victor & ciura.ro & linkedin.com/in/victor-ciura
Most everybody has heard that C++ is a Multi-Paradigm Programming Language, but what does that really mean?
The defined language paradigms are: Imperative, Procedural, Functional, Declarative, & Object-Oriented, but what does that really mean?
These are the building blocks in the levels of granularity, almost a base implementation style but when many people say paradigm when they are really thinking of bigger more sophisticated conceptual processing and data models.
What are some of these alternate paradigms people are thinking of. Join us for an exploration of what paradigms are, what they look like, and how do they are used in software design.
Chris Ryan
Chris Ryan was classically trained in software and hardware engineering. He is well experienced in Modern C++ on extremely large projects and Classic ‘C’. He is currently only interested in Modern C++ projects and taking a break from firmware & embedded software.
Chris recently joined the ISO C++ Standards Committee and works with the Evolution Working Group(EWG) and a couple of the Study Groups(SG).
He works in complex problem spaces but believes in simplification and reducing complexity. Chris has no interest in C#/.,Net, Java, js or web-ish tech.
Programming languages nowadays are often packed with a standard set of tools that form an ecosystem around it. Compilers and debuggers, static analyzers, build systems, dependency managers, and unit testing frameworks are essential for adoption and evolve with the language.
C++ is about to turn 40. Though the ecosystem was very diverse and incomplete for many years, it is getting better! In this talk, I will discuss:
You’ll get a better understanding of the tools available to help you develop complex solutions in C++ without struggling with toolsets.
Anastasiia Kazakova
C++ Tools Marketing Lead, JetBrains
As a C and C++ software developer, Anastasia Kazakova created real-time *nix-based systems and pushed them to production for 8 years. She worked as an intern in Microsoft Research, Networking department, and launched the first 4G network in Russia being a part of the Yota operator team. She has a passion for networking algorithms and embedded programming and believes in good tooling. With all her love for C++, she is now the Product Marketing Manager on the JetBrains C++ tools and .NET marketing teams.
Instruction Level Parallelism (ILP) is the magic ingredient of a modern CPU that makes it run fast. But not all programs are equal, some have more ILP, others have less. In this talk we are going to divide our hot loops into two types : low-ILP and high-ILP, and then we will focus our attention on how to make those low-ILP loops faster.
Ivica Bogosavljevic
Senior Software Engineer with 12 years of experience active in the domain of Linux and bare-metal embedded systems. His professional focus is application performance improvement - techniques used to make your C/C++ program run faster by using better algorithms, better exploiting the underlying hardware, and better usage of the standard library, programming language, and the operating system. Writer for a performance-related tech blog: johnnysswlab.com
One of the fun and motivating reasons to use the C++ programming language is the ability to optimize code. One of the best ways to optimize code is to avoid any computation in the first place! In this talk, we are going to learn how to approach the C++ programming language, thinking about compile-time computation (e.g. constexpr, static_assert, and template meta-programming) and some other tricks to avoid computation at run-time (e.g. short-circuit evaluation, caching, and lazy evaluation). In this talk, participants will learn how these techniques improve performance (with measurements using the perf profiler), as well as learn how these techniques also make C++ a safer programming language. This talk is targeted towards beginner to intermediate range C++ programmers.
Mike Shah
I am currently an Associate Teaching Professor at Northeastern University in the Khoury College of Computer Sciences. My primary teaching interests are in computer systems, computer graphics, and software engineering. My research interests are related to performance engineering (dynamic analysis), software visualization, and computer graphics.
Along with teaching and research work, I have juggled occasional consulting work as a 3D Senior Graphics Engineer in C++.
In this talk I provide my experience on the last three years of building restful interfaces in C++ using nlohmann::json and cpp-httplib. I will present a case study showing you the basics of how each of these header only libraries work, teasing out the pros and cons for our companies needs. Some insights into how Restful APIs like Stripe are created will be provided, and we’ll look at how using, and converting to strong types using proper design patterns can make your life easier if you go down the same route. Throughout the talk, I’ll specifically share in the experience gained from implementing RESTful APIs in credit card transaction systems with Mastercard/Visa. Join this session to learn how you can use JSON and/or HTTP to interface with almost anything.
Kevin Carpenter
I have in technology for over 30 years, 17 of those developing applications for in C++. The last fourteen years have been working in finance. First on the modeling and simulation side and now more recently in the transaction processing. Taking over a legacy application has been an adventure in not only managing the code but finding ways to bring it into the current century while still maintaining business ROI for all the changes that are made.
"Why should we move to a more advanced C++ version if we can already archive everything with C++11, which is also considered as a modern C++?"
"If you ask yourself this question, this talk is for you. In this talk we'll discuss the new features from C++17 to C++20, and we'll talk briefly about major features in 23.
"C++11/14 brought us the beginning of useful features like lambda expressions, iterators improvements, constexpr, auto and more. However, the more the C++ standard made progress, the more compile time options have been added and the readability became easier to archive. Moving forward gives more stability to code, based on the most experienced C++ developers' experience, who take part as standard and compilers writers.
Coral Kashri
C++ boundaries investigator. Cppsenioreas blog writer.
We all like to write code - right? But to write a successful piece of software requires effort on aspects other than the code.
In this talk, I will list some of these topics, and suggest techniques that will help you be successful. Things like testing, documentation, dealing with user questions and bug reports, along with tools to help you make your code better. I'll talk about static analysis, sanitizers, fuzzing,
The talk will feature examples from libc++, Boost, and other projects.
Marshall Clow
Marshall has been writing code for more than 40 years. He has been writing open source code for 20+ years. He contributes to Boost (since 2002), was the tech lead for libc++ for many years, and was the chair of the Library Working Group of the C++ standards committee.
This talk is a deep dive into the history behind MDSPAN (it’s roots being in Kokkos::View), the C++ standardization effort behind it (current status, various tradeoffs made over time, and language changes to help support it) and how SYCL is looking to leverage it in the future. MDSPAN is a non-owning multidimensional array reference, currently slated to be one of the flagship libraries added to C++23. View/reference vocabulary types first entered C++17 with string_view (a non-owning string reference), followed by span (a non-owning single dimension contiguous memory reference) and the ranges library. MDSPAN is the natural progression of this, and one that is critical to distributed (eg. CPU/GPU programming) and high-performance computing.
MDSPAN got its roots from Kokkos::View, One key difference between Kokkos::View & MDSPAN: Kokkos::View may be owning (reference-counted reference semantics) or non-owning. The former is also being standardized for C++26 as MDARRAY, although with value and not reference-counted semantics. Separately, in 2014 Microsoft proposed a similar type, array_view, be added to the standard. After a year and a half and seven revisions, it was ultimately abandoned in favor of what is now MDSPAN because it did not provide a zero-overhead abstraction.
The MDSPAN proposal itself has taken seven years and has been through 17 revisions, with input from many different companies as well as the C++ Committee. What changed over the years and why did it change? In parallel, two key language changes were made which ultimately improved the interface: deprecating the comma operator inside square brackets, and the addition of the multidimensional subscript operator. This allows the natural syntax of a[I, j, k] instead of inferior alternatives like a(i, j, k), a[I][j][k] or even a[Index(i), j, k].
Nevin Liber
Nevin “🙂” Liber is a Computer Scientist in the ALCF (Argonne Leadership Computing Facility) division of Argonne National Laboratory, where he works on Kokkos and Aurora. He also represents Argonne on the SYCL and C++ Committees, the latter as Admin Chair, Vice Chair of LEWGI/SG18 and Vice Chair of the US Delegation.
Back when he started out working at Bell Labs over three decades ago, a friend of his called and asked “What do you know about C++? You folks invented it!” That was enough to get a relatively shy junior engineer to go find the local expert so he could go play with it, and the rest is history! He has worked in C++ across various industries and platforms (big data, low-latency, operating systems, embedded, telephony and now exascale computing, just to name a few). He has also been a C++ Committee member since 2010 and hosted both the C++ and C standards meetings in Chicago.
Being introduced to C++20, ranges changed the way we write code. C++23 not only brings with it a large pile of new utilities but actually introduces a fundamental change to one of the core concepts in the ranges world - the view.
Absurd as it sounds, views can now also own their elements while still being cheap to pass around. This talk will explain how that works as well as describe the most useful algorithms and adaptors we can now take advantage of, like using std::generator to implement range adaptors, printing ranges, or even using the new std::optional monadic interface.
Dvir Yitzchaki
A Senior Software Engineer at Roku Inc. Member of the Israeli National Body for WG21.
In our daily work, we often use integral data types to perform arithmetic calculations, but we may not always consider how the selection of the data type can affect performance and compiler optimizations. This talk will delve into the importance of choosing the correct data type for the job and how it impacts compiler optimizations. We will also examine the overall performance implications for the application. We will explore specific algorithms where using unsigned data types is more beneficial and other situations where signed data types are the best choice. Attendees will come away with a deeper understanding of how data type selection can impact their code and how to make better choices for optimal performance.
Alex Dathskovsky
Alex has over 16 years of software development experience, working on systems, low-level generic tools, and high-level applications. Alex has worked as an integration/software developer at Elbit, senior software developer at Rafael, technical leader at Axxana, software manager at Abbott Israel, and now a group manager a technical manager at Speedata.io, an exciting startup that will change big data and analytics as we know them. In his current job, Alex is developing a new CPU/APU system working with C++20, massive metaprogramming, and the development of LLVM to create the next Big Thing for Big Data. Alex is a C++ expert with a strong experience in template meta-programming. Alex also teaches a course about the new features of modern C++, trying to motivate companies to move to the latest standards.
Ranges are one of the major additions of C++20, in which our main abstraction for sequences shifted from iterator-pairs into full fledged concepts, allowing better composability, expressibility and safety when working with bounded and even unbounded one dimensional sequences of data. The fluent use of the pipe-operator gave us power to write complex functional-style algorithms which are both highly readable and perfomant. The ranges library, especially with some recent C++23 additions also better exposes us to the notion of 'range-of-ranges' and multi-dimentional spans, which weren't in focus of the STL in prior versions of the language.
One key feature of the STL since the last century was the large number of algorithms and building blocks which seemed woven together and gave us a vocabulary by which algorithms could be expressed with little need to work with raw loops.
Together with the introduction of ranges, the STL has also gained various range-based algorithms (mostly views and adapters), yet most of those algorithms basic adaptations of the ones that are available in the iterator-pair model.
In a talk from 2002, the primary designer of STL described the process of gathering, currating and solidifying the algorithms in the STL circa 1998. This talk aims to apply a similar process to the universe of C++20/C++23 ranges, and propose potential additions to our vocabulary when developing range-based algorithms.
We will go over a variety of algorithms which currently don't exist for ranges, describe their potential value, and discuss whether they can or should be added to the standard.
A few examples of algorithms which will be covered:
take_between
and histogram
, ...merge_join
, set_union
, set_intersection
, ...histogram
(for non sorted ranges)sort_dimension
As we go through the various examples, we'll discuss what might be good candidates for addition to the STL (and reference prior talks on the topic), the notion of sorted ranges, and hopefully leave the talk with a good desire to compose algorithms in the brave new world of ranges
Roi Barkan
Professional software developer and architect since 2000, Roi's main focus throughout his career was on high performance and distributed systems, implementing complex and innovative algorithms. Roi has been the VP technologies of Istra Research since 2014, where he helps creating low latency financial systems. Prior to working for Istra Research, Roi spent 12 years in software development, architecture and management in the IT Security field. Roi received his B.A in Computer Science with high honors from the Technion in Israel, and his executive MBA from Tel Aviv University.
Have you ever wondered what it takes to write a proposal for the C++ standard? Have you had an idea on how to improve this language or its standard library and decided it was worth standardizing? Well, I did. And I failed. But I'm happy that I failed. Even happier than if I'd succeeded!
In this talk, I will share my experience of proposing P2406, where we demonstrated a design flaw of counted_iterator and suggested a fix, and why it wasn't accepted into the standard.
We'll briefly discuss C++20 ranges as background material, but the audience is expected to understand the basics of STL (the use of iterators to communicate between containers and algorithms).
Yehezkel Bernat
Yehezkel is a senior software engineer at Microsoft, where he works on the Excel team. He has previous experience at Intel as a software developer. He also enjoys teaching object-oriented programming (OOP) as a teaching assistant at Hadassah College. His favorite programming language is C++, and he loves to share his knowledge and passion for it with others.
The cloud is revolutionizing scalable and distributed computing but is difficult to take advantage of in C++. While cloud functions can scale up to unlimited concurrency, calling them takes dozens of lines of complex C++ code. While NoSQL databases are ubiquitous associative containers, they cannot be used in a range, and so forth.
What if we could make cloud functions as easy to use as thread functions, NoSQL databases as easy to use as any other associative container, and do the same for other cloud services as well? You don't just have to imagine it. In this talk, I will show how you can take advantage of the cloud with simple and natural C++.
Mike Spertus
Mike Spertus is a Senior Principal Engineer at Amazon where he builds cloud development tools and an Adjunct Professor of Computer Science at the University of Chicago where he teaches Big Data and C++. He helped write one of the first commercial MS-DOS C compilers for the original IBM PC AT. Mike has submitted over 50 proposals as a long-time member of the C++ standards committee, a number of which are now parts of the C++ standard.
He is excited about this talk as it brings together all of the above experiences.
Performance as the top priority is the defining aspect of C++. No other programming language provides the performance-critical facilities of the language. This talk is about performance-related coding guidelines in modern C++. We will discuss generic issues everyone can use daily to make code performant but still readable. Several examples will be analyzed in detail to understand better how they are implemented. We won’t dive into low-level optimizations. We will discuss the more effective use of data structures, algorithms, constexpr, etc. Each suggestion is supported by benchmarks and some explanations that can help with better intuition.
Dor Rozen
Dor has two years of experience as a software engineer at Cadence. He is a Jasper engine application group member, which develops software applications using formal verification engines. He developed some complex scheduling algorithms utilizing reinforcement learning to improve performance. He is passionate about innovation, problem-solving, and learning. Dor received his Bachelor of Science in Computer Science from the Technion in Israel with honors.
Performance as the top priority is the defining aspect of C++. No other programming language provides the performance-critical facilities of the language. This talk is about performance-related coding guidelines in modern C++. We will discuss generic issues everyone can use daily to make code performant but still readable. Several examples will be analyzed in detail to understand better how they are implemented. We won’t dive into low-level optimizations. We will discuss the more effective use of data structures, algorithms, constexpr, etc. Each suggestion is supported by benchmarks and some explanations that can help with better intuition.
Igor Pora-Leonovich
Is a Lead Software engineer at Cadence for 7 years. Develops different apps that are part Jasper EDA suits. Use C++ for 8 years professionally.
Modern C++ has many language features and that can be leveraged to design an expressive API or a domain-specific language. However, these features are limited by the syntax rules of C++. To overcome this limitation, we will discuss the use of compile-time parsers to write more expressive code with zero overhead.
We will analyze open-source compile-time parsing libraries from C++11 to C++23 and compare their APIs in terms of flexibility and expressiveness. Additionally, we will delve into the techniques used in the implementation of these libraries to handle compile-time parsing under the constraints of compile-time execution.
Finally, we will highlight how these libraries can be used to reduce boilerplate and write compile-time regular expressions, parsers, parser generators, Rust's macro rules and reflection features. Attendees of this talk will gain a deeper understanding of the power and versatility of compile-time parsers in C++.
Alon Wolf
Alon is a Senior Software Engineer at Medtronic specializing in 3D and computer graphics with a passion for high performance. He has developed many custom simulation and rendering engines for different platforms using modern C++. He also writes a C++ technical blog and participates in game jams.
What happens to our code after going through the compiler? This is where the linker steps in to connect all the pieces: it points the function call to the right function, puts all the blocks of code in their right place, and even does some optimizations.
This talk will describe the job of the linker, and focus on the complexities that C++ adds to it: function overloading, templates, exceptions, and static initialization.
Examples and specifics will be based on the Linux ecosystem, but the general ideas are applicable everywhere.
Tomer Vromen
C++ programmer for ~10 years. Currently working at Dell.
Oh no! This code has virtual functions!! Quick!!!! We need to rewrite it as templates!!!!!
For some time, inheritance has been getting a bad rap. In this lecture we'll dive into why that is, what alternatives there are, and are they actually better.
We'll also touch on the subject of caches and the limitations of sample profiling as means for determining which is faster.
Shachar Shemesh
Shachar began programming when he was 9, and still finds passion in it, 40 years later. At the time, dinosaurs ruled the earth and computers only had a grand total of 8 bits. Shachar's career took him to almost every niche that the software world has to offer. Typically, if there was a niche his career, for some reason, failed to take him, he'd go there in an open source project. These days Shachar is running two YouTube channels, one in English and one in Hebrew, plus an open source project for implementing the computers of his childhood on an FPGA. Rumor has it he also has a day job.
The second most quoted statement in program development is “make your API easy to use correctly, hard to use incorrectly”. But what does this really mean? Most examples that explain this are very basic and deal more with readability of the code than with actual protection against misuse or incorrect usage.
We want our API's to be simple and generic. We want to allow for a wide variety of operations to be done simply. But we also want it to be used correctly and to protect against mistakes. Unfortunately, as we will see in this talk, these two goals can conflict with each other.
In this talk I will demonstrate some design and implementation decisions I encountered in real life code. We will discuss different considerations we need to take into account when designing our API and see how we can make the code guide you towards using it correctly.
Yossi Moalem
Yossi is a SrPrincipal Software Dev Engineer at Fortinet. He has over 15 years of experience as a professional programmer, mainly in C/C++. Yossi considers the standard as light reading and spends all his spare time learning new technologies and methodologies (much to the delight of his wife!!). He likes teaching and sharing his knowledge, but what really does it for him is refactoring legacy code into beautifully crafted code. On the positive side, he loves Led Zeppelin.
Classically, functions and methods use arguments in order to produce a variety of results. But at times, this means passing “configuration” arguments to many APIs, which may hit hard maintainability and readability. Alternately, classes introduce configuration APIs in order to affect their general behavior. But these require special care when shared objects are invoked from multiple threads.
In this talk a novel but simple approach is presented, which affects the behavior of code, depending on the calling context. It eliminates the need to refactor big APIs with configuration arguments, and it is completely thread safe. Most of all, it lends itself to a flow-centric approach, where desired behaviors map naturally to code scopes.
A few use cases will be presented, such as logging, decorators, event counting, dependency injection, and caching.
Eran Talmor
In the past 20 years, I have been building formal-methods based CAD-tools for microprocessor and SOC design and verification. Currently I lead an R&D team in Cadence Design Systems, and previously I have worked for Intel in their CAD development group. I code C++ regularly, but also had non negligible experience with functional languages such as OCaml.
On 2017, I worked on an embedded central unit (linux, c++, QT) that was supposed to listens to many endpoints and pass their rf frames to the Server. Sometimes we had unexplained resets and sometimes we lost data(frames). I emphasize sometimes because most of the time everything worked well. This made it harder to find and simulate the problems. The central unit was supposed to support 7500 endpoints but in the real world after 5000 endpoints it crashed occasionally. Customers complained, the software was hard to maintain and very unpopular (for the developers) to work on. After two years of work, the unit supported 10k endpoints without resets or any loss of data. Let me tell you, how we did it.
Gili Kamma
I am the R&D manager at Blitz Electric Motors in Israel, leading the software department (embedded, data and full stack). I have a B.S.c in electrical engineering from Tel-Aviv university, Israel. With almost 20 years of experience developing embedded systems, I have worked across plenty of technical environments, BSP and low-level drivers in C, C++, Python, C#, Java, DB, and Cloud. I am an expert in developing embedded systems, gained a lot of knowledge from changing projects and products every year or two for the past 20 years. I have extensive experience in creating applications from scratch, improving performance of existing ones, and maintaining products by solving bugs and ensuring quality. I have a broad experience in industries such as Automotive, Cyber, IOT, Networking, and Aerospace.
Template programming became a fundamental feature in C++, presenting many basic and advanced features that are necessary for writing a faster, effective and more flexible program.
In my presentation, I will cover some basic and advanced features that are necessary for C++ programmers, including the basics, the process of compiling such programs and what this process (instantiation) has to do with the concept of specializing a template.
In addition - I will talk about the meaning of writing understandable and convenient template code, how to achieve it by using C++20 features, and will teach the basics of meta-programming and static computations - in terms of template C++ programming.
Rotem Ferdman
An Embedded C++ programmer and teacher.
C++ has always been my hobby.
I would like to talk about basics, and mainly about templates, concepts, metaprogramming and/or static computations.
You can write a virtual method, you can write a templated method, but you can't write a method which is both. In this talk we will discuss why that is, why you might still want it, and give a few suggestions as to what to do about it.
Noam Weiss
I've been working with C++ for two decades now. I'm excited by brilliant code that does "black magic".
High Frequency Trading (HFT) companies require high-speed networks and co-location services to minimize latency. Employing C++ can provide a significant performance boost for low-latency network-intense applications, with the proper design and implementation. In this talk, we will explore various techniques used in real production code to build applications that prioritize lower latency as a major goal.
The talk will focus on the importance of low latency trading infrastructure specifically transferring market data from the exchanges to the algo trading client applications.
The talk will cover up how the speed of data transfer is crucial for effective trading decisions, as even a few microseconds delay can result in missed opportunities or financial losses. The talk will also discuss various C++ concepts and services used to build low latency trading infrastructure, including dedicated pub/sub infrastructure, use of hardware accelerators, kernel bypass libraries, and few more...
This talk will be relevant to anyone interested in C++ performance and runtime efficiency, whether in HFT or any other field that requires low latency.
The audience will gain a deeper understanding of the critical role of low latency trading infrastructure in modern financial markets and the strategies used to achieve this critical goal.
Daniel Babitsky
Daniel Babitsky, software developer and cyber security expert with a degree in Computer Engineering and a Master's in Business Management specializing in Big Data.
Over 16 years of software development experience with C++, Rust TypeScript etc'...
Building low latency algo-trading related applications for the past few years as part of the Trading and Infrastructure dev teams.
Daniel is currently part of the Infra teams at Final R&D group where he spends much of his time building low latency algo-trading related applications, and low latency code for the use of the various dev teams.
We like to write code but—despite our best efforts—we make mistakes. Our program will contain bugs. Sometimes, we don’t write what we mean to write, sometimes we don’t understand an aspect of our programming language and at other times we lack—or fail to consider—some critical information about our program’s system environment. As a result, our program will not behave correctly. What do we do now?
In this talk, I would like to take you through the entire debugging process, starting with a program that crashes. What do we do next? Which questions do we have to ask? What information do we need? What can we do to find the cause of the crash? Which tools can help us in this quest, and, last but not least, what can we do to make sure this bug never happens again? Thanks to real-world examples that we have encountered—and debugged—at think-cell over the years, you will learn how to reproduce, locate, understand and fix even the most difficult bugs.
Sebastian Theophil
Sebastian has been working at think-cell Software since its founding in 2002. In the last few years, among many other things, he has ported think-cell to run on macOS. He is also the maintainer of the typescripten project which lets programmers call JavaScript libraries from C++ code compiled to WebAssembly in a convenient and type-safe way. He enjoys leaving his desk from time to time to talk at international C++ conferences.
In recent years, co-processors and accelerators such as GPUs have become increasingly prevalent in high-performance computing. These devices are designed to handle a massive amount of parallelism and have much higher computing power than traditional CPUs. OpenMP, an application programming interface (API) for shared-memory parallel programming, has adapted to this changing hardware landscape by adding directives that can map codes and data onto these devices. These directives are known as target directives, and they allow for efficient programming of GPUs and other specialized accelerators. Target directives can significantly improve the performance of high-performance code (such as Fortran, C, and C++) running on heterogeneous systems. They allow for the distribution of work across multiple devices, enabling the programmer to take full advantage of the processing power available on each device. This can result in significant speedups, especially for code that requires a high level of parallelism. In this talk, we will delve into the specifics of using target directives for programming GPUs. We will examine the advantages of target directives over classic shared-memory parallelism and explore how they can be used to optimize code for maximum performance. We will also discuss some of the challenges and trade-offs involved in using target directives, including issues related to memory management and data transfers between devices.
Gal Oren
Dr. Gal Oren is a scientist in the Computer Science department at Technion - Israel Institute of Technology and a senior researcher in the Scientific Computing Center at Nuclear Research Center - Negev. Oren completed his distributed computing CS Ph.D. at Ben-Gurion University in 2020, advised by Prof. Leonid Barenboim and Prof. Michael Elkin. His research interests include all aspects of scientific computing, specifically High-Performance, Super, Distributed, Parallel & Cluster Computing, and AI.
Undefined behavior and its liberal adoption by compilers is pretty unique to C/C++. Number of so-called UBs and their implication is an order of magnitude larger compared to similar languages, e.g., Ada, and is the source of hard to find bugs as well as security vulnerabilities.
Scott Meirs popularized the notion of UB summoning "nasal demons", yet most of the noses of veteran C++ programmers are intact.
To understand and mitigate UB in large code bases, it is crucial to understand how the UB can affect your code.
We will survey real life bugs and security vulnerabilities, and how exactly they affect the code.
We will show several categories of misbehavior that could be caused by UB, and will try to bound the implication of it.
Elazar Leibovich
GPU @nextsilicon, storage @vastdata, virtualization @Ravello (RIP), big data @Akamai, 🆓github.com/elazarl/goproxy ❤️perf ❤️µarch
Exceptions were originally heralded as a new modern way to handle errors. However the C++ community is split as to whether exceptions are useful or should be banned outright. It has not helped the pro-exception lobby that in their enthusiasm to embrace exceptions, a lot of code has been written that puts exceptions in a bad light. In this talk, We will present the original intent of exceptions and a brief overview of how exception mechanics work and how they circumvent the usual stack return mechanism to set the stage. we will then examine many cases of exception misuse including resource management, retries, hierarchies, data passing and control flow to name but a few. For each case, we will then suggest better ways to handle each specific situation. In many cases, exceptions are often dropped in favor of some other more appropriate paradigm. Finally we will introduce situations that can truly benefit from exceptions and what a model exception class might look like.
Peter Muldoon
Pete Muldoon has been using C++ since 1991. Pete has worked in Ireland, England and the USA and is currently employed by Bloomberg as a senior Engineering Lead. A consultant for over 20 years prior to joining Bloomberg, Peter has worked on a broad range of projects and code bases in a large number of companies both tech and finance. Such broad exposure has, over time, shown what works and what doesn't for large scale engineering projects. He's a proponent of applied engineering principles, elegant solutions and expressive code.
In this talk, we will analyze some big open source C++ projects from the point of view of a build engineer. How does the style of their code effect the resources it needs to compile?
Alex Cohn
Alex fell in love with C++ 32 years ago and has enjoyed this union ever since. He is currently working for Incredibuild on reducing barriers for C++ development for users of Xcode.
We all want to be able to run the same code on CPUs but also on GPUs and maybe other devices, On devices made by Intel, AMD, Nvidia or others. In this hands-on workshop we’ll learn how to do it.
Who should attend?
Why should you attend this workshop?
Topics covered:
Prerequisites: Participants should be able to program in C/C++
Hands-On
Guy Tamir
Guy is a technology evangelist at Intel Software and Advanced Technology group. His main areas of interest and expertise are Artificial Intelligence, Computer vision, Video processing, and Heterogeneous, multi-accelerator parallel computing. Guy is an active YouTuber, with the OpenVINO and oneAPI video channel. Guy holds a M.Sc. (EE, Technion) and MBA.
We will dive into the exciting world of GPU technology, with a particular focus on Compute Unified Device Architecture (CUDA), a parallel computing platform and application programming interface model developed by NVIDIA. The talk will first provide a foundational understanding of CUDA and its role in enhancing GPU performance for a wide variety of applications. We will then delve into the most recent advancements in CUDA and GPU technology, explaining how these innovations are reshaping various fields.
Tomer Gal
Tomer Gal is the Founder and Chief Technology Officer (CTO) at OpTeamizer, a preferred partner of NVIDIA, distinguishing itself in areas such as Embedded Edge, Metropolis, Service Delivery, and Solution Advising. In addition to leading his firm, he is a valued member of the NVIDIA VC Alliance, investing in artificial intelligence (AI) companies. With extensive industry knowledge, Tomer holds the position of NVIDIA's DLI lecturer for CUDA development and Deep Learning. He also serves as an evaluator for the Israel Innovation Authority, specializing in AI. Beyond this, he holds a position as a faculty member in the Computer Science department at Braude, where he instructs in the field of Artificial Intelligence.
Under Tomer's visionary leadership, OpTeamizer is creating tailored solutions for over 100 companies spanning diverse sectors. These include homeland security, healthcare, inspection industries, smart cities, and many more. His commitment to innovation continues to drive the company's success.